package entities;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

import entities.vo.HogarVO;
import entities.vo.ItemPedidoVO;
import entities.vo.RopaVO;

@Entity
public class ItemPedido implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GenericGenerator(name = "generator", strategy = "increment")
	@GeneratedValue(generator = "generator")
	private long id;
	@OneToOne(targetEntity=entities.Articulo.class)
	Articulo articulo;
	private int cantidadPedidaTotal;
	private int cantidadPendienteDeEntrega;
	
	public ItemPedido() {
		// TODO Auto-generated constructor stub
	}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public ItemPedido(Articulo articulo, int cantidad) {
		super();
		this.articulo = articulo;
		this.cantidadPedidaTotal = cantidad;
	}

	public int getCantidadPendienteDeEntrega() {
		return cantidadPendienteDeEntrega;
	}
	public void setCantidadPendienteDeEntrega(int cantidadPendienteDeEntrega) {
		this.cantidadPendienteDeEntrega = cantidadPendienteDeEntrega;
	}
	public Articulo getArticulo() {
		return articulo;
	}
	public void setArticulo(Articulo articulo) {
		this.articulo = articulo;
	}
	public int getCantidadPedidaTotal() {
		return cantidadPedidaTotal;
	}
	public void setCantidadPedidaTotal(int cantidadPedidaTotal) {
		this.cantidadPedidaTotal = cantidadPedidaTotal;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((articulo == null) ? 0 : articulo.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final ItemPedido other = (ItemPedido) obj;
		if (articulo == null) {
			if (other.articulo != null)
				return false;
		} else if (!articulo.equals(other.articulo))
			return false;
		return true;
	}
	public void setItemVO(ItemPedidoVO itemVO) {
		setCantidadPedidaTotal(itemVO.getCantidadPedida());
		setCantidadPendienteDeEntrega(itemVO.getCantidadPendiente());
		Articulo articulo = null;
		if(itemVO.getArticulo() instanceof RopaVO){
			articulo = new ArticuloRopa();
		}else if(itemVO.getArticulo() instanceof HogarVO){
			articulo = new ArticuloHogar();
		}
		articulo.setArticuloVO(itemVO.getArticulo());
		setArticulo(articulo);
	}
	
}
